// 声明包名，一般约定俗成的包名称和文件夹的名称相同
// main函数固定在main包下
/*
语法：package 包名
*/
package main

import "fmt"

/*
单个导包的语法：import "包名"

	或者
多个导包的语法：import(
			"包名"
			)

################
导入标准库：import    "fmt" //文件执行的时候会到GOROOT目录下加载fmt模块
相对路径：  import    "./model"  //当前文件同一目录的model目录，但是不建议这种方式import
绝对路径：  import    "shorturl/model"  //加载GOPATH/src/shorturl/model模块 或者是go的项目目录下

################
1. 点操作   有时候会看到如下的方式导入包     import( . “fmt” )
这个点操作的含义就是这个包导入之后在你调用这个包的函数时，你可以省略前缀的包名，也就是前面你调用的fmt.Println(“hello world”)  可以省略的写成Println(“hello world”)
2. 别名操作   别名操作顾名思义可以把包命名成另一个用起来容易记忆的名字
          import( f “fmt” )   别名操作调用包函数时前缀变成了重命名的前缀，即f.Println(“hello world”)
3.  _操作   这个操作经常是让很多人费解的一个操作符，请看下面这个import
          import ( “database/sql” _ “github.com/ziutek/mymysql/godrv” )

	_操作其实只是引入该包。当导入一个包时，它所有的init()函数就会被执行，但有些时候并非真的需要使用这些包，仅仅是希望它的init()函数被执 行而已。这个时候就可以使用_操作引用该包了。即使用_操作引用包是无法通过包名来调用包中的导出函数，而是只是为了简单的调用其init函数()。
*/

//j := 20  这样在函数外的声明会报错
var j int // 默认值是0，float类型的0.0 bool类型的false
func main() {
	fmt.Println("hello world!! ---j:", j)
	var i int
	i = 10
	// 上面的 两句代码相当于，这样的短声明方式只能在函数内部使用
	temp := 10
	// 如果声明的变量不使用可以这样丢弃，但是不建议声明没有意义的变量
	_ = i

	temp++
	//++temp

	fmt.Println("自增和自减都只有后加加或者后减减操作，并且只支持是单独的一行：temp++:" /*temp++ 这样的操作会报错*/, temp)
	// const 类型的变量声明的时候必须初始化
	const a int = 20
	//b := &a  // 语法禁止通过获取地址的方式修改变量的值，但是这样的语法在c语言中是可以使用的，所以一般c语言中const一般修饰的是指针
	fmt.Println(a)
}
